home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 1 / Amiga Tools.iso / egs-tools / egs_dev-disk / egsdemos / egsexamples / other / curvestar.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-06  |  2.4 KB  |  108 lines

  1. /* curvestar.c
  2.  *
  3.  * FM - 12.08.92
  4.  *
  5.  * Ausgabe eines Farbverlaufes in der Form eines Sterns.
  6.  */
  7. #include <exec/types.h>
  8. #include <proto/exec.h>
  9. #include <egs/egsintui.h>
  10. #include <egs/proto/egsintui.h>
  11. #include <egs/egsgfx.h>
  12. #include <egs/proto/egsgfx.h>
  13. #include <egs/egs.h>
  14. #include <egs/proto/egs.h>
  15. #include <egs/egsblit.h>
  16.  
  17. /* die Zeiger auf unsere Libraries */
  18. struct Library *EGSIntuiBase;
  19. struct Library *EGSGfxBase;
  20. struct Library *EGSBase;
  21.  
  22.  
  23. /* Ausgabe eines regelmäßigen runden Sterns mit 4 Spitzen */
  24. void drawStar8( EG_RastPortPtr rp, long mx, long my, long h1, long h2 )
  25. {
  26.     EG_AreaMove ( rp, mx, my-h1 );
  27.     EG_AreaCurve( rp, h2, h1-h2, h2-h1, -h2, mx+h1, my   );
  28.     EG_AreaCurve( rp, h2-h1, h2, h2, h2-h1, mx,    my+h1 );
  29.     EG_AreaCurve( rp, -h2, h2-h1, h1-h2, h2, mx-h1, my   );
  30.     EG_AreaCurve( rp, h1-h2, -h2, -h2, h1-h2, mx, my-h1 );
  31.     EG_AreaEnd( rp );
  32. }
  33.  
  34.  
  35. /* und hier passiert etwas */
  36. #define MAX_SIZE        100
  37.  
  38. void doThings( EI_WindowPtr window )
  39. {
  40.     long size;
  41.     struct EB_ClipRect clip;
  42.  
  43.     clip.Next   = NULL;
  44.     clip.Left   = window->BorderLeft;
  45.     clip.Top    = window->BorderTop;
  46.     clip.Right  = window->BorderLeft+window->Width-1;
  47.     clip.Bottom = window->BorderTop+window->Height-1;
  48.  
  49.     EG_InstallClipRegion(window->RPort,&clip);
  50.  
  51.     for( size=2*MAX_SIZE; size>1; size-- )
  52.         {
  53.         EG_SetAPen( window->RPort, ((255*size)/MAX_SIZE)*0x1010000 + 0x0000ff00 );
  54.         drawStar8( window->RPort, window->Width/2 + window->BorderLeft,
  55.                       window->Height/2 + window->BorderTop ,
  56.                       MAX_SIZE,size );
  57.         }
  58.  
  59.     EG_RemoveClipRegion(window->RPort);
  60.  
  61.     WaitPort( window->UserPort );
  62. }
  63.  
  64.  
  65. /* das Hauptprogramm */
  66. void main( int argc, char *argv[] )
  67. {
  68.     static struct EI_NewWindow newWindow =
  69.         {
  70.         50,30, 400,300,
  71.         0,0, 0,0,
  72.         NULL,
  73.         EI_WINDOWCLOSE | EI_WINDOWBACK | EI_WINDOWDRAG,
  74.         NULL,
  75.         "Testfenster",
  76.         EI_SMART_REFRESH,
  77.         EI_iCLOSEWINDOW,
  78.         NULL,
  79.         {0,0,0,0,0,0,0},
  80.         NULL,
  81.         NULL
  82.         };
  83.     EI_WindowPtr window;
  84.  
  85.     /* die Libraries öffnen */
  86.     EGSIntuiBase = OpenLibrary( (UBYTE *)"egsintui.library", 0 );
  87.     if ( EGSIntuiBase )
  88.         {
  89.         EGSGfxBase = OpenLibrary( (UBYTE *)"egsgfx.library", 0 );
  90.         if ( EGSGfxBase )
  91.             {
  92.             EGSBase = OpenLibrary( (UBYTE *)"egs.library", 0 );
  93.             if ( EGSBase )
  94.                 {
  95.             window = EI_OpenWindow( &newWindow );
  96.             if ( window )
  97.                 {
  98.                 doThings( window );
  99.                 EI_CloseWindow( window );
  100.                 }
  101.                 CloseLibrary( EGSBase );
  102.                 }
  103.         CloseLibrary( EGSGfxBase );
  104.         }
  105.         CloseLibrary( EGSIntuiBase );
  106.         }
  107. }
  108.